package de.tudarmstadt.fgbs.cafe.plugin.management;

import java.util.List;

import de.tudarmstadt.fgbs.cafe.plugin.PluginInterface;
import de.tudarmstadt.fgbs.cafe.structure.PluginStruct;

/**
 * A class implementing the {@link PluginManagerInterface} has to manage the
 * plugins. Plugins are classes which implement the {@link PluginInterface}.
 * 
 * @author Christian Schlehuber
 * 
 */
public interface PluginManagerInterface {

    /**
     * Gets an implementation of the {@link PluginInterface} which has the given
     * platform id.
     * 
     * @param platformId
     *            The platform id of the platform which shall be returned.
     * @return An implementation of the {@link PluginInterface}, or
     *         <code>null</code> if no implementation with the given platform id
     *         exists.
     */
    public PluginInterface getPlugin(int platformId);

    /**
     * Gets all available plugins.
     * 
     * @return A {@link List} of plugins which are represented by a
     *         {@link PluginStruct}.
     */
    public List<PluginStruct> getPlugins();
}
